﻿using Presentacion.Clases.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Seg.Logica;
using Seg.Entidades;
using Presentacion.Clases;

namespace Presentacion.Controllers.Mantenimiento
{
    public class OficinaController : Base
    {
        //
        // GET: /Oficina/

        public ActionResult Index()
        {
            Init(false);
            return View();
        }
        public JsonResult ListarOficinaXUbicacion(int CodigoUbicacion)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    List<Oficina> lst = new List<Oficina>();
                    OficinaLogica servicio = new OficinaLogica();

                    lst = servicio.ListarXUbicacion(CodigoUbicacion);
                    List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                    lst.ForEach(c =>
                    {
                        items.Add(new Constante.SelectItems
                        {
                            Valor = Convert.ToString(c.CodigoOficina),
                            Descripcion = c.Nombre
                        });
                    });

                    resultado.result = 1;
                    resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ///almacenar log de errores
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarOficina()
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    List<Oficina> lst = new List<Oficina>();
                    OficinaLogica servicio = new OficinaLogica();

                    lst = servicio.Listar("", 0, "A");
                    List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                    lst.ForEach(c =>
                    {
                        items.Add(new Constante.SelectItems
                        {
                            Valor = Convert.ToString(c.CodigoOficina),
                            Descripcion = c.Nombre
                        });
                    });

                    resultado.result = 1;
                    resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarOficina", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarOficinaJQGRID(string nombre,decimal pais, string anulado, string sidx, string sord, int page, int rows)
        {
            OficinaLogica servicio = new OficinaLogica();
            List<DTOOficina> lst = new List<DTOOficina>();

            var oficinas = servicio.Listar(nombre,pais, anulado);

            oficinas.ForEach(c =>
            {
                DTOOficina oficinaDTO = new DTOOficina();
                oficinaDTO.CodigoOficina = c.CodigoOficina;
                oficinaDTO.Nombre = c.Nombre;
                oficinaDTO.Descripcion = c.Descripcion;
                oficinaDTO.DescPais = new PaisLogica().ObtenerPais(c.CodigoPais).Nombre;
                oficinaDTO.Anulado = c.Anulado;
                lst.Add(oficinaDTO);
            });

            var count = oficinas.Count();
            int pageIndex = page - 1;
            int pageSize = rows;
            int totalRecords = count;
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            var items = lst.Skip(pageIndex * pageSize).Take(pageSize);

            var result = new
            {
                total = totalPages,
                page,
                records = count,
                rows = (
                    from item in items
                    select new
                    {
                        id = item.CodigoOficina,
                        cell = new string[] { 
                            item.CodigoOficina.ToString(),
                            item.Nombre,
                            item.Descripcion,
                            item.DescPais,
                            Convert.ToString(item.Anulado == true ? "Inactivo" : "Activo") 
                        }
                    }).ToArray()
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        public JsonResult Insertar(Oficina entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    OficinaLogica servicio = new OficinaLogica();
                    servicio.Insertar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Insertar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult Actualizar(Oficina entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    OficinaLogica servicio = new OficinaLogica();
                    servicio.Actualizar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Actualizar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult Eliminar(Oficina entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    OficinaLogica servicio = new OficinaLogica();

                    var result = servicio.Eliminar(entidad.CodigoOficina);

                    if (result == 1)
                    {
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_ELIMINAR;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_ELIMINAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Eliminar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ObtenerOficina(Oficina entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if(!isLogout(ref resultado))
                {
                    OficinaLogica servicio = new OficinaLogica();
                    DTOOficina oficina = new DTOOficina();

                    var result = servicio.ObtenerOficina(entidad.CodigoOficina);

                    oficina.CodigoOficina = result.CodigoOficina;
                    oficina.Nombre = result.Nombre;
                    oficina.Descripcion = result.Descripcion;
                    oficina.CodigoPais = result.CodigoPais;
                    oficina.Anulado = result.Anulado;

                    resultado.result = 1;
                    resultado.data = Json(oficina, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ObtenerOficina", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
    }
}
